#ifndef BGV_KEY_H_
#define BGV_KEY_H_

#include <cstdint>
#include <vector>

using namespace std;

/* *
 * @brief ：Key 类，用于表示加密操作中的密钥，包含两个成员数组：ax 和 bx。
 */
class Key {
public:
    uint64_t *ax;
    uint64_t *bx;
    Key() {}
    Key(uint64_t *ax, uint64_t *bx);
    Key(const Key &key) = default;
    Key &operator = (const Key &key) = default;
    // 移动构造函数
    Key(Key &&key) = default;
    Key &operator = (Key &&key) = default;
    ~Key() = default;
};

/* *
 * @brief ：SwitchKey 类，表示密钥交换操作中使用的密钥。包含两个成员：rax 和
 * rbx。
 */
class SwitchKey {
public:
    std::vector<std::vector<uint64_t *>> rax;
    std::vector<std::vector<uint64_t *>> rbx;
    SwitchKey() = default;
    SwitchKey(const std::vector<std::vector<uint64_t *>> &rax, const std::vector<std::vector<uint64_t *>> &rbx);
    virtual ~SwitchKey();
};

#endif
